package com.designpattern.structure.proxy.statically;

import lombok.extern.slf4j.Slf4j;

/**
 * @author chengze
 * @date 2022/12/2
 * @desc 代理类
 *       代理类与被代理类实现同一个接口，从而可以具有相同的行为
 *       持有一个被代理类对象，从而可以调用被代理类的方法
 *       并可以提供一些增强方法
 *       实际上提供了一种间接访问对象的方法，在这个“间接”里可以提供增强方法
 *
 *       代理模式和装饰器模式的区别
 *       代理通过一个代理类把所有的增强都实现了，而装饰器是多个 具体的装饰者 分别实现增强，套娃（组合）成一个具体的装饰者
 */
@Slf4j
public class ProxyClz implements ProxyBiz{

    ProxiedClz proxiedClz;

    public ProxyClz(ProxiedClz proxiedClz) {
        this.proxiedClz = proxiedClz;
    }

    @Override
    public void biz() {
        log.info("代理类提供的一些增强方法~");
        proxiedClz.biz();
    }
}
